package cn.e4j.modular.common.service.impl;

import cn.e4j.core.dto.Dtos;
import cn.e4j.core.dto.impl.Dto;
import cn.e4j.core.shiro.ShiroKit;
import cn.e4j.core.shiro.ShiroUser;
import cn.e4j.modular.common.entity.SysOrgT;
import cn.e4j.modular.common.mapper.SysAuthorityMapper;
import cn.e4j.modular.common.service.SysAuthorityService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 系统数据权限 服务实现类
 * </p>
 *
 * @author ganjia
 * @since 2019-03-05
 */
@Service
public class SysAuthorityServiceImpl extends ServiceImpl<SysAuthorityMapper, SysOrgT> implements SysAuthorityService {

    @Override
    /**
     * 部门权限
     * @param dto
     * @return
     */
    public List<Dto> getOrgsAuthority(Dto dto) {
        List<Dto> dtoList = null;
        ShiroUser shiroUser = ShiroKit.getUser();
        Dto queryDto = Dtos.newDto();
        queryDto.put("ID", shiroUser.getID());
        dtoList = this.baseMapper.getSys003(queryDto);
        if (dtoList.size() == 0) {
            Dto defaultDto = Dtos.newDto();
            defaultDto.put("ID", shiroUser.getORG_ID());
            dtoList.add(defaultDto);
        }
        return dtoList;
    }

    @Override
    /**
     * 根据当前下属组织（部门）获取用户信息
     *
     * list所属部门+下级部门 来自 getOrgsAuthority()
     * @param list
     * @return
     */
    public Dto getSys004(List<Dto> list) {
        List<Dto> dtoList = null;
        List<Dto> pList = new ArrayList<>();
        ShiroUser shiroUser = ShiroKit.getUser();
        Dto inDto = Dtos.newDto();
        //如果小于等于1 代表没有下级
        if (list.size() > 1) {
            Dto queryDto = Dtos.newDto();
            queryDto.put("ORGS", list);
            dtoList = this.baseMapper.getSys004(queryDto);
            if (dtoList.size() == 0) {
                dtoList = new ArrayList<>();
                Dto defaultDto = Dtos.newDto();
                defaultDto.put("ID", shiroUser.getID());
                dtoList.add(defaultDto);
            }
        } else {
            dtoList = new ArrayList<>();
            Dto defaultDto = Dtos.newDto();
            defaultDto.put("ID", shiroUser.getID());
            dtoList.add(defaultDto);
        }
        inDto.put("ywy", dtoList);
        return inDto;
    }

    @Override
    /**
     * 客户权限
     * @param dto
     * @return
     */
    public List<Dto> getCustomersAuthority(Dto dto) {
        List<Dto> dtoList = null;
        ShiroUser shiroUser = ShiroKit.getUser();

        Dto queryDto = Dtos.newDto();
        queryDto.put("ENT", shiroUser.getDBC());
        queryDto.put("ID", shiroUser.getID());
        queryDto.put("GWAA001", shiroUser.getACCOUNT());
        Dto gwb001Dto = this.baseMapper.getGwb001(queryDto);
        Dto gwb003Dto = this.baseMapper.getGwb003(queryDto);
        //QYCOUNT 人员服务区域   HYCOUNT 渠道分类
        if (gwb001Dto.getInteger("QYCOUNT") + gwb001Dto.getInteger("HYCOUNT") > 0) {
            queryDto.put("QYCOUNT", gwb001Dto.getInteger("QYCOUNT"));
            queryDto.put("HYCOUNT", gwb001Dto.getInteger("HYCOUNT"));
            if (gwb003Dto != null) {
                if (!gwb001Dto.getString("GWAA009").equals("EMPL")) {
                    queryDto.put("customer", gwb001Dto.getString("GWAA009"));
                } else {
                    queryDto.put("customer", null);
                }
            } else {
                queryDto.put("customer", null);
            }
            if (dto == null || "".equals(dto.getString("GWAK006"))) {
                queryDto.put("GWAK006", "1");
            } else {
                queryDto.put("GWAK006", dto.getString("GWAK006"));
            }
            dtoList = this.baseMapper.getGwb002(queryDto);
            if (dtoList.size() == 0) {
                Dto defaultDto = Dtos.newDto();
                defaultDto.put("ID", "GWAK001");
                dtoList.add(defaultDto);
            }
        }
        return dtoList;
    }

    @Override
    /**
     * 渠道权限
     * @param dto
     * @return
     */
    public List<Dto> getGwaesAuthority(Dto dto) {
        List<Dto> dtoList = null;
        ShiroUser shiroUser = ShiroKit.getUser();
        Dto queryDto = Dtos.newDto();
        queryDto.put("ENT", shiroUser.getDBC());
        queryDto.put("ID", shiroUser.getID());
        queryDto.put("GWAA001", shiroUser.getACCOUNT());
        Dto gwb001Dto = this.baseMapper.getGwb001(queryDto);
        if (gwb001Dto.getInteger("HYCOUNT") > 0) {
            dtoList = this.baseMapper.getGwae(queryDto);
            if (dtoList.size() == 0) {
                Dto defaultDto = Dtos.newDto();
                defaultDto.put("ID", "GWAE001");
                dtoList.add(defaultDto);
            }
        }
        return dtoList;
    }

    /**
     * 根据 主题+客户 获取商机拜访下一个序列号（最大序号+1)
     *
     * @param inDto
     * @return BigDecimal
     */
    public BigDecimal getGwb003(Dto inDto) {
        Dto result = this.baseMapper.getGwb003(inDto);
        if (result != null) {
            BigDecimal gwbhseq = result.getBigDecimal("GWBHSEQ");
            return gwbhseq.add(BigDecimal.ONE);
        } else {
            return BigDecimal.ONE;
        }
    }

    @Override
    /**
     * 部门权限
     * 根据当前登录者id,获取登陆者所属组织（部门）和下属组织（部门）
     * @param dto
     * @return
     */
    public List<Dto> getSys003(Dto dto) {
        List<Dto> dtoList = null;
        ShiroUser shiroUser = ShiroKit.getUser();
        Dto queryDto = Dtos.newDto();
        queryDto.put("ID", shiroUser.getID());
        dtoList = this.baseMapper.getSys003(queryDto);
        return dtoList;
    }
}
